1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package rx.internal.operators;
17
18 import static org.mockito.Matchers.isA;
19 import static org.mockito.Mockito.inOrder;
20 import static org.mockito.Mockito.mock;
21 import static org.mockito.Mockito.times;
22
23 import org.junit.Test;
24 import org.mockito.InOrder;
25
26 import rx.Observable;
27 import rx.Observer;
28 import rx.exceptions.TestException;
29 import rx.functions.Func2;
30
31 public class OperatorSequenceEqualTest {
32
33 @Test
34 public void test1() {
35 Observable<Boolean> observable = Observable.sequenceEqual(
36 Observable.just("one", "two", "three"),
37 Observable.just("one", "two", "three"));
38 verifyResult(observable, true);
39 }
40
41 @Test
42 public void test2() {
43 Observable<Boolean> observable = Observable.sequenceEqual(
44 Observable.just("one", "two", "three"),
45 Observable.just("one", "two", "three", "four"));
46 verifyResult(observable, false);
47 }
48
49 @Test
50 public void test3() {
51 Observable<Boolean> observable = Observable.sequenceEqual(
52 Observable.just("one", "two", "three", "four"),
53 Observable.just("one", "two", "three"));
54 verifyResult(observable, false);
55 }
56
57 @Test
58 public void testWithError1() {
59 Observable<Boolean> observable = Observable.sequenceEqual(
60 Observable.concat(Observable.just("one"),
61 Observable.<String> error(new TestException())),
62 Observable.just("one", "two", "three"));
63 verifyError(observable);
64 }
65
66 @Test
67 public void testWithError2() {
68 Observable<Boolean> observable = Observable.sequenceEqual(
69 Observable.just("one", "two", "three"),
70 Observable.concat(Observable.just("one"),
71 Observable.<String> error(new TestException())));
72 verifyError(observable);
73 }
74
75 @Test
76 public void testWithError3() {
77 Observable<Boolean> observable = Observable.sequenceEqual(
78 Observable.concat(Observable.just("one"),
79 Observable.<String> error(new TestException())),
80 Observable.concat(Observable.just("one"),
81 Observable.<String> error(new TestException())));
82 verifyError(observable);
83 }
84
85 @Test
86 public void testWithEmpty1() {
87 Observable<Boolean> observable = Observable.sequenceEqual(
88 Observable.<String> empty(),
89 Observable.just("one", "two", "three"));
90 verifyResult(observable, false);
91 }
92
93 @Test
94 public void testWithEmpty2() {
95 Observable<Boolean> observable = Observable.sequenceEqual(
96 Observable.just("one", "two", "three"),
97 Observable.<String> empty());
98 verifyResult(observable, false);
99 }
100
101 @Test
102 public void testWithEmpty3() {
103 Observable<Boolean> observable = Observable.sequenceEqual(
104 Observable.<String> empty(), Observable.<String> empty());
105 verifyResult(observable, true);
106 }
107
108 @Test
109 public void testWithNull1() {
110 Observable<Boolean> observable = Observable.sequenceEqual(
111 Observable.just((String) null), Observable.just("one"));
112 verifyResult(observable, false);
113 }
114
115 @Test
116 public void testWithNull2() {
117 Observable<Boolean> observable = Observable.sequenceEqual(
118 Observable.just((String) null), Observable.just((String) null));
119 verifyResult(observable, true);
120 }
121
122 @Test
123 public void testWithEqualityError() {
124 Observable<Boolean> observable = Observable.sequenceEqual(
125 Observable.just("one"), Observable.just("one"),
126 new Func2<String, String, Boolean>() {
127 @Override
128 public Boolean call(String t1, String t2) {
129 throw new TestException();
130 }
131 });
132 verifyError(observable);
133 }
134
135 private void verifyResult(Observable<Boolean> observable, boolean result) {
136 @SuppressWarnings("unchecked")
137 Observer<Boolean> observer = mock(Observer.class);
138 observable.subscribe(observer);
139
140 InOrder inOrder = inOrder(observer);
141 inOrder.verify(observer, times(1)).onNext(result);
142 inOrder.verify(observer).onCompleted();
143 inOrder.verifyNoMoreInteractions();
144 }
145
146 private void verifyError(Observable<Boolean> observable) {
147 @SuppressWarnings("unchecked")
148 Observer<Boolean> observer = mock(Observer.class);
149 observable.subscribe(observer);
150
151 InOrder inOrder = inOrder(observer);
152 inOrder.verify(observer, times(1)).onError(isA(TestException.class));
153 inOrder.verifyNoMoreInteractions();
154 }
155 }